﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using DataAccess;

namespace BusinessLogic
{
    public class Respuesta : Mensaje
    {
        #region ATRIBUTOS

        long _IdMensaje;

        #endregion
            
        #region PROPERTIES
        public long IdMensaje
        {
            get { return _IdMensaje; }
            set { _IdMensaje = value; }
        }

        #endregion

        #region CONSTRUCTORES
        public Respuesta() { }
        public Respuesta(long pId, DateTime pFecha, string pTexto, long pIdMen)
                        : base(pId, pFecha, pTexto) 
        {
            _IdMensaje = pIdMen;    
        }
        public Respuesta(DateTime pFecha, string pTexto, long pIdMen)
            : base(pFecha, pTexto)
        {
            _IdMensaje = pIdMen;
        }
        #endregion

        #region METODOS

        //Insertar un nuevo respuesta.
        public void insertRespuesta(long pSol)
        {
            ControllerRespuesta.getInstancia().insertRespuesta(this.Texto, (Int32)pSol, (Int32)this.IdMensaje);
        }

        //Parsea una datatable a una lista de tipo Respuesta.
        public static List<Respuesta> ParseToRespuesta(DataTable pDt)
        {
            //Recibe como parametro una data table con los registros correspondientes a una o mas
            //respuestas y devuelve una lista de objetos "Respuesta".
            List<Respuesta> lstRes = new List<Respuesta>();

            //Se recorre la tabla.
            for (int i = 0; i < pDt.Rows.Count; i++)
            {
                //Se crea una nueva instancia de la clase Persona.
                Respuesta unaRe = new Respuesta();
                unaRe.Id = long.Parse(pDt.Rows[i]["Id"].ToString());
                unaRe.Texto = pDt.Rows[i]["Texto"].ToString();
                unaRe.Fecha = DateTime.Parse(pDt.Rows[i]["Fecha"].ToString());

                //Se agrega el mensaje a la lista.
                lstRes.Add(unaRe);
            }
            return lstRes;
        }

        public static List<Respuesta> getRespuestaByNroMensaje(long pMen)
        {
            //Se obtiene una lista de respuestas correspondiente al numero de mensaje al que pertenecen.
            DataTable dt = ControllerRespuesta.getInstancia().getRespuestaByNroMensaje((Int32)pMen);
            //Se parsea la datatable a una lista de tipo Mensaje.
            return (ParseToRespuesta(dt)).Count() != 0 ? ParseToRespuesta(dt) : null;
        }

        #endregion
    }
}
